package edu.eam.dao;

import edu.eam.modelo.Tecnologia;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Jhon Mario Lotero
 */
public class DAOTecnologia {
    
    
    private Connection conex;

    /**
     * Consltructor de la clase que recibe 
     * la conexion para realizar las consultas 
     * necesarias
     * @param conex 
     */
    public DAOTecnologia(Connection conex) {
        this.conex = conex;
    }
    
    
    /**
     * Metodo que nos permite crear una tecnologia 
     * para identificar mejor una leccion aprendida
     * @param tecnologia 
     */
    public void crearTecnologia (Tecnologia tecnologia) throws SQLException{
        
        String consulta = "INSERT INTO tecnologia(nombre,descripcion) VALUES (?,?);";
        PreparedStatement pstm = null;
        
        try {
        
            pstm = conex.prepareStatement(consulta);
            pstm.setString(1, tecnologia.getNombre());
            pstm.setString(2, tecnologia.getDescripcion());
            pstm.executeUpdate();
            
        } finally {
            if (pstm != null) {               
                pstm.close();
            }
        }      
    }
    
    /**
     * Metodo que nos permite modificar la informacion de una
     * tecnologia dentro de las lecciones aprendidas
     * @param tecnologia
     * @throws SQLException 
     */
    public void modificarTecnologia(Tecnologia tecnologia) throws SQLException {
        
        String consulta = "UPDATE tecnologia SET nombre = ?, descripcion = ? WHERE id = ?;";
        PreparedStatement pstm = null;
        
        try {
        
            pstm = conex.prepareStatement(consulta);
            pstm.setString(1, tecnologia.getNombre());
            pstm.setString(2, tecnologia.getDescripcion());
            pstm.setInt(3, tecnologia.getId());
            pstm.executeUpdate();
            
        } finally {
            if (pstm != null) {               
                pstm.close();
            }
        }   
    }
    
    
    /**
     * Metodo que nos trae todas las tecnologias
     * que se encuentran en base de datos
     * @return Lista de tecnologias
     * @throws SQLException 
     */
    public List<Tecnologia> darTecnologias() throws SQLException{
    
        List<Tecnologia> tecnologias = new ArrayList<Tecnologia>();
        String consulta = "select id,nombre,descripcion from tecnologia";
        
        PreparedStatement pstm = null;
        ResultSet res = null;
        
        try {
        
            pstm = conex.prepareStatement(consulta);
            res = pstm.executeQuery();
            
            while (res.next()) {
                
                int id = res.getInt(1);
                String nombre = res.getString(2);
                String descripcion = res.getString(3);
                
                Tecnologia tec = new Tecnologia(nombre, descripcion, id);
                tecnologias.add(tec);
            }
            
        } finally {
            if (pstm != null) {               
                pstm.close();
            }
            
            if (res != null) {
                
                res.close();
            }
        }   
        
        return tecnologias;
    }
    
    /**
     * Metodo que no encunetra una tecnologia
     * que se encuentran en base de datos con el mismo nombre
     * @return tecnologia con el nombre 
     * @throws SQLException 
     */
    public Tecnologia buscarTecnologia(String nombre) throws SQLException{
    
        String consulta = "select id,descripcion from tecnologia where nombre = ?";
        Tecnologia tec = null;
        PreparedStatement pstm = null;
        ResultSet res = null;
        
        try {
        
            pstm = conex.prepareStatement(consulta);
            pstm.setString(1, nombre);
            res = pstm.executeQuery();
            
            while (res.next()) {
                
                int id = res.getInt(1);
                String descripcion = res.getString(2);
                
                tec = new Tecnologia(nombre, descripcion, id);
            }
            
        } finally {
            if (pstm != null) {               
                pstm.close();
            }
            
            if (res != null) {
                
                res.close();
            }
        }   
        
        return tec;
    }
    
}
